import UIKit
//基础内容

//基本类型
var str = "Hello, playground"
var red,yello,blue:Double
let minValue = Int64.min
let maxValue = UInt8.max
//e = 10的n次方
let e2Value = 12.3e2

let three = 3
let pointOneFourOneFiveNine = 0.14159
let pi = Double(three) + pointOneFourOneFiveNine
//typealias 定义类型别名
typealias ace = UInt16
let aceValue = ace.max

//元组  任意类型的组合
let http404Error = (404,"Not Found")
print("元组调用第一个元素:\(http404Error.0)")
//分解时不需要的元素可用“_”代替
let (firstElement,secondElement) = http404Error
print("分解元组后的调用\(firstElement)\(secondElement)")
let classTable = (age:15,name:"liLei",result:80)
print("元组直接命名调用:\(classTable.age)")

let possibleNumber = "132d"
let convertedNumber = Int(possibleNumber)
var boolValue = false
//var如果要指定类型  类型最好设置可选值  如果赋值nil便不会报错 如果赋值其他类型也会报错
//任何类型的可选项都可以设置成 nil 而不仅仅是对象类型
var serverResponseCode: Int? = 404
serverResponseCode = nil

//！！展开可选项
if convertedNumber != nil {
    print("value is \(String(describing: convertedNumber))")
}else{
    print("value is \(String(describing: convertedNumber))")
}

if let actualNumber = Int(possibleNumber) {
    print("value is \(actualNumber)")
}else{
    print("转换无值 \(possibleNumber)")
}

//错误处理
func canThrowAnError() throws{
//    错误函数
}
//调用
do{
    try canThrowAnError()
}catch{
    print("抛出错误结果")
}


//断言和先决条件
//断言
let age = -3
//断言信息可删除
assert(age >= 0, "A person's age cannot be less than zero")
//如果断言判断age >= 0 为false 断言触发 终止程序

//先决条件
//如果条件的结果是 false 信息就会显示出来
precondition(age > 0, "Index must be greater than zero.")

/*
 断言和先决条件的不同之处在于他们什么时候做检查：
 断言只在 debug 构建的时候检查，但先决条件则在 debug 和生产构建中生效。
 在生产构建中，断言中的条件不会被计算。
 这就是说你可以在开发的过程当中随便使用断言而无需担心影响生产性能。
 */










